'use strict';

const Controller = require('egg').Controller;

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = 'hi, egg';
    }

    async code() {
        // 取出手机号
        const { mobile } = this.ctx.query;
        // 生成随机验证码 0.12321321321
        const code = String(Math.random()).substr(2, 6);
        // 保存到数据库
        await this.app.mysql.query(
            'insert into code (mobile, code) values (?, ?)',
            [mobile, code]
        );
        // 调用第三方 api 给手机号用户发送验证码
        // 返回成功
        this.ctx.body = {
            code: 200,
            message: '获取验证码成功',
        };
    }

    async login() {
        // 解析参数，获取手机号和验证码
        const { mobile, code } = this.ctx.request.body;
        // 非空校验、手机号验证
        // ...
        // 检查是否存在该验证码
        let res = await this.app.mysql.query(
            'select * from code where mobile = ?',
            [mobile]
        );
        if (res.length === 0) {
            this.ctx.body = {
                code: 400,
                message: '请先获取验证码',
            };
            return;
        }
        const codeFromDb = res[0];
        // 判断验证码是否正确
        if (codeFromDb.code !== code) {
            this.ctx.body = {
                code: 400,
                message: '验证码不正确',
            };
            return;
        }
        // 拿着验证成功的手机号，找到这个用户
        res = await this.app.mysql.query(
            'select * from user where mobile = ?',
            [mobile]
        );
        // 如果用户不存在，就提示用户不存在，不再和以前一样，走注册流程了
        if (res.length === 0) {
            this.ctx.body = {
                code: 404,
                message: '用户不存在',
            };
            return;
        }
        const user = res[0];
        // 登录生成 token
        const token = this.ctx.helper.genToken({ ...user });
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: {
                token,
                user,
            },
        };
    }
}

module.exports = HomeController;
